function minFlipsMonoIncr(s) {
    const n = s.length;
    let dp0 = 0, dp1 = 0;
    for (let i = 0; i < n; i++) {
        const c = s[i];
        //? dp1New = Math.min(dp0, dp1)是需要根据前面1转0和0转1更小那个决定的，因为1前面是0或是1都是可以的
        //? 而dp0New无需最小值比较是因为0的前面一定是0而不可能是1
        let dp0New = dp0, dp1New = Math.min(dp0, dp1);
        if (c === '1') {
            //? 1->0次数
            dp0New++;
        } else {
            //? 0->1次数
            dp1New++;
        }
        dp0 = dp0New;
        dp1 = dp1New;
    }
    return Math.min(dp0, dp1);
};

minFlipsMonoIncr("00110")
